import useLocaleStore from '../../store/locale'

/**
 * 格式化数字
 * @param value 要格式化的数字
 * @param options 格式化选项
 * @returns 格式化后的字符串
 */
export function formatNumber(value: number, options?: Intl.NumberFormatOptions): string {
  const localeStore = useLocaleStore()
  const language = localeStore.language || navigator.language

  return new Intl.NumberFormat(language, options).format(value)
}

/**
 * 数字转中文
 * @param value 要格式化的数字
 * @param options 格式化选项
 * @returns 中文字符串
 */
export function formatNumberToChinese(value: number, options?: Intl.NumberFormatOptions): string {
  return new Intl.NumberFormat('zh-Hans-CN-u-nu-hanidec', options).format(value)
}

/**
 * 格式化货币
 * @param value 金额
 * @param currency 货币代码 (如 'CNY', 'USD')
 * @param options 格式化选项
 * @returns 格式化后的货币字符串
 */
export function formatCurrency(value: number, currency: string, options?: Intl.NumberFormatOptions): string {
  const localeStore = useLocaleStore()
  const language = localeStore.language || navigator.language

  return new Intl.NumberFormat(language, {
    style: 'currency',
    currency,
    ...options,
  }).format(value)
}

/**
 * 格式化日期
 * @param date 日期对象或字符串
 * @param options 格式化选项
 * @returns 格式化后的日期字符串
 */
export function formatDate(date: Date | string, options?: Intl.DateTimeFormatOptions): string {
  const localeStore = useLocaleStore()
  const language = localeStore.language || navigator.language
  const dateObj = typeof date === 'string' ? new Date(date) : date

  return new Intl.DateTimeFormat(language, options).format(dateObj)
}

/**
 * 格式化相对时间，比如一天前，2周后
 * @param value 时间差值
 * @param unit 时间单位 (如 'day', 'hour', 'minute')
 * @param options 格式化选项
 * @returns 格式化后的相对时间字符串
 */
export function formatRelativeTime(value: number, unit: Intl.RelativeTimeFormatUnit, options?: Intl.RelativeTimeFormatOptions): string {
  const localeStore = useLocaleStore()
  const language = localeStore.language || navigator.language

  return new Intl.RelativeTimeFormat(language, options).format(value, unit)
}

/**
 * 格式化单位
 * @param value 数值
 * @param unit 单位 (如 'meter', 'kilogram') // 支持的单位转化 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/supportedValuesOf#supported_unit_identifiers
 * @param options 格式化选项
 * @returns 格式化后的单位字符串
 */
export function formatUnit(value: number, unit: string, options?: Intl.NumberFormatOptions): string {
  const localeStore = useLocaleStore()
  const language = localeStore.language || navigator.language

  return new Intl.NumberFormat(language, {
    style: 'unit',
    unit,
    ...options,
  }).format(value)
}

/**
 * 获取浏览器的时区
 * @returns 浏览器时区
 */
export function getTimeZone(): string {
  return Intl.DateTimeFormat().resolvedOptions().timeZone
}
